﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Core.Comamad
{
    public enum LoaiXuLi
    {
        Add,
        Remove,
        Update
    }
    public class ObCommand : ICommand
    {
        public LoaiXuLi LoaiHanhDong { get; set; }
        public BaseData DoiTuongXuLi { get; set; }
        protected IQuanLi IQL;

        public virtual void Execute()
        {
            switch (LoaiHanhDong)
            {
                case LoaiXuLi.Add:
                    IQL.Add(DoiTuongXuLi);
                    break;
                case LoaiXuLi.Remove:

                    IQL.Delete(DoiTuongXuLi);
                    break;
                case LoaiXuLi.Update:

                    IQL.Update(DoiTuongXuLi);
                    break;
                default:
                    break;
            }
        }
        public virtual LoaiXuLi Undo(LoaiXuLi loaixuli)
        {
            switch (loaixuli)
            {
                case LoaiXuLi.Add:
                    return LoaiXuLi.Remove;
                case LoaiXuLi.Remove:
                    return LoaiXuLi.Add;
                case LoaiXuLi.Update:
                    return LoaiXuLi.Update;
                default:
                    return LoaiXuLi.Add;
                    break;
            }
        }
        public virtual void UnExecute()
        {
            LoaiHanhDong = Undo(LoaiHanhDong);
            Execute();

        }

        /// <summary>
        /// proxy kiem tra  loai cua doi tuong 
        /// </summary>
        /// <param name="lxli">loai hanh dong xu li</param>
        /// <param name="doituongxl">doi tuon xu li</param>
        public ObCommand(LoaiXuLi lxli, BaseData doituongxl)
        {
            LoaiHanhDong = lxli;
            if (doituongxl is SinhVien)
                IQL = QuanLiSinhVien.Instance;
            if (doituongxl is LopHoc)

                IQL = QuanLyLop.Instance;
            DoiTuongXuLi = doituongxl;

        }




    }
}
